## Install remotes
if (!requireNamespace("remotes", quietly = TRUE)) {
install.packages("remotes")
}
## Install BioConductor if not installed yet
if (!requireNamespace("BiocManager",quietly = TRUE)) {
remotes::install_cran("BiocManager")
}
BiocManager::version()
## Download the data
bfc <- BiocFileCache::BiocFileCache()
raw.path <- BiocFileCache::bfcrpath(bfc,file.path(
"http://cf.10xgenomics.com/samples",
"cell-exp/2.1.0/pbmc4k/pbmc4k_raw_gene_bc_matrices.tar.gz"
))
untar(raw.path,exdir = file.path(tempdir(),"pbmc4k"))
## Define the path as a global variable
pbmc4k.path <- file.path(tempdir(),"pbmc4k/raw_gene_bc_matrices/GRCh38")Single-cell RNA-seq
Licenciatura en Ciencias Genómicas, Transcriptómica, Semestre 2025-2
1. Motivación
1.1 ¿Qué es scRNA-seq?
El scRNA-seq (secuenciación de ARN unicelular) es una técnica que permite medir la expresión génica a nivel de células individuales. Esto contrasta con los métodos tradicionales (como el bulk RNA-seq), que miden la expresión como un promedio de todas las células en una muestra.
1.2 ¿Para qué sirve?
scRNA-seq se utiliza para:
Identificar subpoblaciones celulares en tejidos heterogéneos.
Estudiar diferencias en la expresión génica entre células individuales.
Investigar procesos dinámicos como la diferenciación celular o respuestas al estrés.
Reconstruir trayectorias celulares en tiempo o espacio.
1.3 Diferencias entre bulk RNA-seq y scRNA-seq
| Característica | scRNA-seq | Bulk RNA-seq |
|---|---|---|
| Resolución | Nivel unicelular | Promedio de todas las células en la muestra |
| Volumen de datos | Más grande debido al análisis de miles de células | Menor, ya que es una única medición por muestra |
| Ruido técnico | Más elevado (dropouts, captura limitada de ARN) | Menor, ya que integra señales de muchas células |
| Análisis de heterogeneidad | Posible (subpoblaciones y trayectorias celulares) | No posible (mezcla de señales celulares) |
| Costo | Generalmente más alto | Generalmente más bajo |
1.4 Análisis de scRNA-seq con SingleCellExperiment (SCE)
SingleCellExperiment es una clase de datos especializada en BioConductor para trabajar con datos de scRNA-seq:
Carga de datos: Los datos se almacenan en un objeto
SingleCellExperiment.Preprocesamiento: Incluye normalización, filtrado de células/géneros y corrección de efectos técnicos.
Análisis avanzado: Se pueden integrar con paquetes como scater (visualización) y scran (análisis de grupos celulares, clustering).
Integración: Compatible con otros flujos de trabajo en R y otros paquetes de BioConductor.
1.4.1 Estructura
assays: Almacena las matrices de datos, como las cuentas de expresión crudas (counts), normalizadas (logcounts), etc.colData: Contiene metadatos relacionados con las células, como tipos celulares, calidad, etc.rowData: Contiene información sobre las características (genes), como IDs, descripciones, etc.reducedDims: Almacena datos de dimensionalidad reducida (PCA, UMAP, t-SNE).metadata: Información adicional sobre el experimento.altExps(opcional): Almacena datos alternativos, como ARN de características específicas (ej., ADT para scRNA-seq multi-ómics).
1.5 Ánalisis de scRNA-seq con Seurat
Seurat es un paquete ampliamente utilizado para análisis de scRNA-seq:
Pipeline completo: Desde preprocesamiento hasta clustering, visualización y análisis diferencial.
Integración multi-ómics: Seurat permite analizar datos de scRNA-seq combinados con otros tipos de datos.
Visualización: Herramientas como UMAP y t-SNE para reducir dimensiones y detectar patrones celulares.
1.5.1 Estructura
assays: Almacena los datos de expresión en distintos niveles de procesamiento (RNA, integraciones, etc.).meta.data: Contiene metadatos de las células, como identificadores de clúster, etiquetas de tipo celular, etc.reductions: Almacena los resultados de métodos de reducción de dimensiones (PCA, UMAP, t-SNE).graphs: Contiene gráficos derivados, como los usados para clustering basado en redes.commands: Almacena el historial de los comandos utilizados para procesar el objeto.tools: Información adicional, como resultados de análisis diferenciales o integraciones.
1.6 Comparación entre SCE y Seurat
| Aspecto | SingleCellExperiment (SCE) | Seurat |
|---|---|---|
| Plataforma principal | R (BioConductor) | R y Python |
| Estructura de datos | Basada en la clase SingleCellExperiment de BioConductor |
Basada en la clase SeuratObject |
| Facilidad de uso | Mayor curva de aprendizaje debido a su modularidad | Más intuitivo y directo, especialmente para principiantes |
| Pipeline integrado | Requiere integración de múltiples paquetes (scater, scran) | Incluye todo en un solo paquete: preprocesamiento, clustering, visualización |
| Flexibilidad | Altamente flexible y compatible con el ecosistema de BioConductor | Enfocado en análisis estándar, con menos opciones para personalización profunda |
| Análisis de clustering | Herramientas avanzadas con scran y otros paquetes | Integrado directamente con métodos optimizados |
| Visualización | Herramientas básicas con scater | Visualización avanzada (UMAP, t-SNE, DimPlot) |
| Multi-ómics | Limitado a la integración mediante otros paquetes | Integración nativa de datos multi-ómics (por ejemplo, scRNA-seq + ATAC-seq) |
| Escalabilidad | Más eficiente en memoria para grandes conjuntos de datos | Requiere más memoria, especialmente con conjuntos de datos muy grandes |
| Soporte técnico | Comunidad fuerte dentro del ecosistema BioConductor | Amplia comunidad de usuarios y documentación accesible |
| Interoperabilidad | Compatible con otros paquetes de BioConductor | Menos interoperable fuera del ecosistema Seurat |
| Análisis diferencial | Depende de herramientas externas como limma y edgeR | Incluido como parte del flujo de trabajo |
| Costo computacional | Más eficiente para cálculos intensivos | Requiere mayor capacidad computacional |
| Facilidad de instalación | Puede ser más complejo debido a dependencias de BioConductor | Fácil de instalar con CRAN o directamente desde GitHub |
1.7 Pipeline general para el análisis de datos de scRNA-seq
El pipeline general para el análisis de datos de scRNA-seq involucra una serie de pasos. Posterior al procesamiento de los reads, se procede a hacer un filtrado de las células en base a sus conteos y número de genes; se realiza una normalización de los datos y si es necesario una correción de batch (que es cuando se tiene en una misma matriz de datos el resultado de dos o más experimentos de secuenciación). Posterior a eso se seleccionan los genes altamente variables (HVG’s) y se realiza una reducción de dimensionalidad. Posterior a eso, se realiza una clusterización de las células. Una vez hecho esto se anotan las células para darles una identidad biológica en base a sus genes marcadores. Finalmente se pueden hacer otros experimentos como RNA velocity, Psuedotime y Gene dynamics.
Para hacer el análisis se va a emplear el dataset de ejemplo de 10XGenomics PBMC4k el cual es de libre acceso. Vamos a descargar los datos.
2. Bioconductor SingleCellExperiment
2.1 Load libraries
Check if libraries are installed
## List of required libraries
libs <- c("SingleCellExperiment","scRNAseq","AnnotationHub","scater","scran","BiocFileCache","DropletUtils","Matrix","PCAtools","EnsDb.Hsapiens.v86","clustree","celldex","SingleR","AUCell","GSEABase","pheatmap")
# Check and install missing libraries
for (lib in libs) {
if (!requireNamespace(lib, quietly = TRUE)) {
message(paste("Installing", lib))
if (startsWith(lib, "EnsDb.") || lib %in% c("scRNAseq", "AnnotationHub", "scater", "scran", "BiocFileCache", "DropletUtils", "celldex", "SingleR", "AUCell", "GSEABase")) {
BiocManager::install(lib,quiet = TRUE, ask = FALSE)
} else
install.packages(lib, quiet = TRUE)
} else
message(paste(lib, "is already installed"))
}Load libraries
## Load libraries
library(scRNAseq)
library(AnnotationHub)
library(scater)
library(scran)
library(BiocFileCache)
library(DropletUtils)
library(Matrix)
library(PCAtools)
library(EnsDb.Hsapiens.v86)
library(clustree)
library(celldex)
library(SingleR)
library(AUCell)
library(GSEABase)
library(pheatmap)2.2 Create SCE object
## As its an output of 10XGenomics we can read it with
## the FxN read10xCounts from DropletUtils
sce.pbmc <- read10xCounts(pbmc4k.path,col.names = TRUE)
sce.pbmc## class: SingleCellExperiment
## dim: 33694 737280
## metadata(1): Samples
## assays(1): counts
## rownames(33694): ENSG00000243485 ENSG00000237613 ... ENSG00000277475
## ENSG00000268674
## rowData names(2): ID Symbol
## colnames(737280): AAACCTGAGAAACCAT-1 AAACCTGAGAAACCGC-1 ...
## TTTGTCATCTTTAGTC-1 TTTGTCATCTTTCCTC-1
## colData names(2): Sample Barcode
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
2.3 Add annotations
Se tienen que unificar los features debido a que puede que haya duplicados dado que un mismo ENSEMBLID puede estar asignado a uno o más symbols (que son los nombre genéricos de los genes). Esta función es muy útil para extraer los metadatos de los genes. Literalmente es como si se pudiera descargar el archivo GTF.
## Chromosome annotation
rownames(sce.pbmc) <- uniquifyFeatureNames(
rowData(sce.pbmc)$ID,rowData(sce.pbmc)$Symbol
)
chr.loc <- AnnotationDbi::mapIds(EnsDb.Hsapiens.v86,
keys = rowData(sce.pbmc)$ID,
keytype = "GENEID",
column = "SEQNAME")
head(chr.loc,5)## ENSG00000243485 ENSG00000237613 ENSG00000186092 ENSG00000238009 ENSG00000239945
## "1" "1" "1" "1" "1"
2.4 Pre-filtering
El droplet detection se realiza para identificar cuáles de los millones de gotas generadas durante la preparación de la muestra contienen células reales (biológicas) y cuáles contienen únicamente ruido o artefactos técnicos. Este paso es crucial porque la tecnología de droplet-based scRNA-seq (como 10x Genomics Chromium) puede capturar tanto células individuales como gotas vacías o gotas con ARN ambiental.
En el análisis de droplet detection de scRNA-seq, se utiliza un enfoque basado en Monte Carlo para generar una distribución de p-valores que nos ayude a diferenciar entre las gotas con señales reales de las que solo contienen ruido. Aquí se aplica la idea de que, para cada gota, las distribuciones de las lecturas de ARN en una gota vacía deben seguir una distribución esperada si la gota no tiene una célula real.
La corrección de Benjamini-Hochberg (BH) se utiliza para controlar la tasa de falsos descubrimientos (FDR) cuando se realizan múltiples pruebas estadísticas. En este contexto, se aplica después de calcular los p-valores de Monte Carlo para las gotas.
Dado que estamos realizando muchas pruebas para cada gota (una por cada gota en el experimento), es importante corregir los p-valores para evitar obtener resultados falsos positivos debido a múltiples comparaciones.
Este enfoque permite mejorar la precisión del análisis de scRNA-seq al reducir el impacto del ruido técnico y asegurarse de que los resultados reflejan datos biológicos reales.
La semilla es esencial para fines de reproducibilidad.
Total UMI count
## Droplet detection
set.seed(100)
e.out <- emptyDrops(counts(sce.pbmc))
## See ?emptyDrops for an explanation of why there are NA values.
summary(e.out$FDR <= 0.001)## Mode FALSE TRUE NA's
## logical 989 4300 731991
## class: SingleCellExperiment
## dim: 33694 4300
## metadata(1): Samples
## assays(1): counts
## rownames(33694): RP11-34P13.3 FAM138A ... AC213203.1 FAM231B
## rowData names(2): ID Symbol
## colnames(4300): AAACCTGAGAAGGCCT-1 AAACCTGAGACAGACC-1 ...
## TTTGTCAGTTAAGACA-1 TTTGTCATCCCAAGAT-1
## colData names(2): Sample Barcode
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
## Limited: whether the or not the computed p-value for a particular barcode is bounded by the number of iterations.
table(Sig=e.out$FDR <= 0.001, Limited=e.out$Limited)## Limited
## Sig FALSE TRUE
## FALSE 989 0
## TRUE 1728 2572
2.5 Quality Control (QC)
Aquí se calculas las métricas de control de calidad para las células.
perCellQCMetrics(): Esta función calcula diversas métricas de calidad por célula en el objetoSingleCellExperiment(sce.pbmc). Las métricas más comunes incluyen el número de genes detectados por célula, el total de lecturas, el porcentaje de ARN mitocondrial, etc.subsets = list(MT = which(chr.loc == "MT")): Aquí, se está especificando que se debe calcular el porcentaje de lecturas que provienen de genes mitocondriales.which(chr.loc == "MT"): Esta parte identifica los índices de las características (genes) que corresponden al cromosoma mitocondrial. Esto permite calcular qué proporción del ARN proviene de genes mitocondriales.El resultado es un objeto
statsque contiene las métricas de calidad para cada célula, incluyendo el porcentaje de ARN mitocondrial.
isOutlier(): Esta función detecta células que tienen valores atípicos para la métrica especificada (en este caso, el porcentaje de ARN mitocondrial). Se utiliza aquí para identificar las células con un porcentaje de ARN mitocondrial inusualmente alto.stats$subsets_MT_percent: Esto extrae el porcentaje de ARN mitocondrial para cada célula del objetostats.type = "higher": Este parámetro indica que se buscan valores atípicos altos. En este caso, se está buscando identificar células que tienen un alto porcentaje de ARN mitocondrial, lo que puede ser indicativo de estrés celular o de células que no están viables.
Antes se tiene que checar cuál es el estado de las células
## Quality Control
stats <- perCellQCMetrics(sce.pbmc,
subsets = list(MT = which(chr.loc == "MT")))
high.mito <- isOutlier(stats$subsets_MT_percent,type = "higher")
sce.pbmc <- sce.pbmc[,!high.mito]
sce.pbmc## class: SingleCellExperiment
## dim: 33694 3985
## metadata(1): Samples
## assays(1): counts
## rownames(33694): RP11-34P13.3 FAM138A ... AC213203.1 FAM231B
## rowData names(2): ID Symbol
## colnames(3985): AAACCTGAGAAGGCCT-1 AAACCTGAGACAGACC-1 ...
## TTTGTCAGTTAAGACA-1 TTTGTCATCCCAAGAT-1
## colData names(2): Sample Barcode
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
## Mode FALSE TRUE
## logical 3985 315
2.6 Normalization
La normalización es crucial en los datos de scRNA-seq porque:
Las células pueden tener diferentes números de lecturas debido a diversos factores técnicos, como la eficiencia de captura de ARN o la cantidad de ARN disponible en cada célula.
Sin normalización, las células con más lecturas tendrán una ventaja artificial, lo que podría sesgar el análisis.
Al normalizar y aplicar la transformación logarítmica, se asegura que las diferencias observadas reflejan más las diferencias biológicas entre las células que las diferencias técnicas.
quickCluster(): Esta función realiza un clustering rápido de las células basándose en sus perfiles de expresión génica. El propósito de este paso es agrupar las células en clusters o grupos que tengan perfiles de expresión similares. Estos clusters se usarán posteriormente para calcular los factores de normalización, que ayudan a corregir las diferencias técnicas entre células.clusters: Este objeto almacena los clusters identificados. La función utiliza un enfoque jerárquico para agrupar las células de forma que las células dentro de un mismo grupo sean lo más similares posibles entre sí, mientras que las células de diferentes grupos serán lo más distintas posible.computeSumFactors(): Esta función calcula los factores de normalización para cada célula. Los factores de normalización se utilizan para corregir las diferencias en la cantidad de ARN total capturado entre las células. Esto es importante porque, aunque las células tengan diferentes cantidades de ARN, estas diferencias no siempre reflejan diferencias biológicas.El argumento
cluster = clustersindica que el cálculo de los factores de normalización se debe hacer dentro de los grupos (clusters) identificados previamente. Esto permite una normalización más precisa al tomar en cuenta las variaciones técnicas dentro de cada cluster, en lugar de normalizar todas las células de manera global.computeSumFactors()usa el método de sumFactors, que es una técnica popular en análisis de datos de single-cell RNA-seq para ajustar las diferencias de secuenciación entre células, utilizando los clusters de células con expresión similar.
logNormCounts(): Esta función aplica una transformación logarítmica a los conteos normalizados de cada célula. Después de que los factores de normalización han sido calculados y aplicados a los datos, se toma el logaritmo de los conteos normalizados. Esto se hace por varias razones:Reducción de la variabilidad: Los conteos de ARN en células individuales pueden variar en varios órdenes de magnitud. Aplicar el logaritmo reduce esta variabilidad y hace que las diferencias entre los genes sean más manejables.
Distribución más normal: Los datos de RNA-seq suelen tener una distribución sesgada. El logaritmo de los conteos normalizados ayuda a transformar la distribución a una forma más cercana a una distribución normal, lo cual es preferible para muchos métodos estadísticos y de análisis.
## Normalization
set.seed(1000)
clusters <- quickCluster(sce.pbmc)
sce.pbmc <- computeSumFactors(sce.pbmc,
cluster = clusters)
sce.pbmc <- logNormCounts(sce.pbmc)
sce.pbmc## class: SingleCellExperiment
## dim: 33694 3985
## metadata(1): Samples
## assays(2): counts logcounts
## rownames(33694): RP11-34P13.3 FAM138A ... AC213203.1 FAM231B
## rowData names(2): ID Symbol
## colnames(3985): AAACCTGAGAAGGCCT-1 AAACCTGAGACAGACC-1 ...
## TTTGTCAGTTAAGACA-1 TTTGTCATCCCAAGAT-1
## colData names(3): Sample Barcode sizeFactor
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
2.7 Highly Variable Genes (HVG’s)
Este proceso es crucial para reducir la dimensionalidad de los datos, ya que los análisis posteriores (como PCA, clustering, o análisis diferencial) se realizarán solo sobre estos genes seleccionados. Los HVGs se consideran informativos porque reflejan la diversidad biológica entre las células y no tanto el ruido técnico.
dec.pbmc <- modelGeneVarByPoisson(sce.pbmc):Aquí, se ajusta un modelo basado en el supuesto de una distribución de Poisson para modelar la varianza génica.
modelGeneVarByPoissonutiliza la media esperada y asume que la varianza sigue la distribución de Poisson (donde la varianza es igual a la media). Si se observa varianza adicional, esto indica que hay factores biológicos (y no solo ruido técnico) contribuyendo a esa variabilidad.El objeto resultante,
dec.pbmc, es un marco de datos que contiene estadísticas como la media, la varianza observada y la varianza esperada para cada gen, además de la “varianza residual” (exceso de varianza).
hvg.pbmc <- getTopHVGs(dec.pbmc, prop = 0.1):getTopHVGsselecciona los genes con mayor varianza residual. En este caso, se selecciona el 10% de los genes más variables (proporción especificada conprop = 0.1).El resultado,
hvg.pbmc, es un vector con los nombres de los genes considerados como HVGs.
Existen otras alternativas para calcular la varianza donde se asumen otro tipo de distribuciones como una binomial negativa.
modelGeneVar: En lugar de asumir una distribución de Poisson, esta función estima la varianza génica usando una distribución basada en la media esperada pero permitiendo una dispersión superior, como en una distribución negativa binomial. Esto es más realista para datos de scRNA-seq, donde la dispersión suele ser mayor que la que predice una Poisson pura.
2.8 Dimensionality Reduction
PCA (Análisis de Componentes Principales):
Proyecta los datos en componentes ortogonales que explican la mayor parte de la varianza.
Es útil para filtrar ruido y trabajar con los componentes principales más informativos.
Frecuentemente es el primer paso en muchos análisis (por ejemplo, clustering y visualización).
Limitación: Lineal, no siempre captura relaciones no lineales complejas.
t-SNE (t-distributed Stochastic Neighbor Embedding):
Técnica no lineal para proyectar datos en 2 o 3 dimensiones.
Se utiliza principalmente para la visualización, resaltando la proximidad de células en un espacio reducido.
No es ideal para análisis cuantitativos o clustering directo, ya que la distancia en el espacio t-SNE no siempre refleja relaciones cuantitativas precisas.
UMAP (Uniform Manifold Approximation and Projection):
Similar a t-SNE, pero conserva mejor las relaciones globales y locales en los datos.
Se utiliza ampliamente para visualización y también como entrada para clustering.
Es más rápido y escalable que t-SNE.
2.9 Clustering
Se necesita agrupar las células para identificar a las poblaciones celulares dentro del dataset.
buildSNNGraph: Esta función construye un grafo de vecinos más cercanos (SNN, por sus siglas en inglés) basado en la similitud entre las células, utilizando una matriz de distancias o similitudes. El grafo resultante captura las relaciones entre las células según su proximidad en un espacio de características (en este caso, el espacio de reducción de dimensionalidad).
sce.pbmc: Es el objetoSingleCellExperimentque contiene los datos de expresión génica de las células.k = 10: Es el número de vecinos más cercanos que se consideran al construir el grafo. Es decir, para cada célula, se encuentran las 10 células más similares basadas en las características (en este caso, las componentes principales de la PCA).use.dimred = "PCA": Esto indica que el grafo se construirá en base a las componentes principales (PCA) previamente calculadas, no sobre los datos originales de expresión génica. Usar un espacio reducido de dimensionalidad como PCA ayuda a reducir el ruido técnico y mejora la eficiencia computacional.igraph::cluster_walktrap(g): Utiliza el algoritmo Walktrap para realizar el clustering basado en el grafo de vecinos más cercanos.- Walktrap es un algoritmo de clustering de grafos que busca identificar grupos de nodos (en este caso, células) que están fuertemente conectados entre sí. La idea es realizar una caminata aleatoria en el grafo y ver qué nodos (células) se visitan juntos con mayor frecuencia, lo que indica que son parte del mismo grupo.
$membership: El resultado del algoritmo es un objeto que indica a qué grupo (o clúster) pertenece cada célula. Este vector de pertenencia se guarda enclust.
Plotting
2.10 Cell type Annotation
La anotación de poblaciones celulares en datos de scRNA-seq (secuenciación de ARN de células individuales) es fundamental para identificar y caracterizar subpoblaciones celulares dentro de una muestra. Este proceso permite asignar etiquetas específicas a las células según sus perfiles de expresión génica, facilitando la comprensión de la heterogeneidad celular y la identificación de tipos celulares o estados funcionales particulares.
Importancia de la anotación de poblaciones celulares en scRNA-seq:
Identificación de tipos y estados celulares: La anotación precisa permite reconocer diferentes tipos celulares y sus estados funcionales, lo que es esencial para comprender procesos biológicos complejos y enfermedades.
Comprensión de la heterogeneidad celular: Ayuda a desentrañar la variabilidad entre células, revelando subpoblaciones que podrían ser relevantes en contextos fisiológicos o patológicos.
Interpretación de datos de expresión génica: Facilita la interpretación de patrones de expresión génica al asociar perfiles específicos con tipos celulares conocidos.
Integración de datos de diferentes fuentes: La anotación estandarizada permite combinar datos de diferentes experimentos o plataformas, enriqueciendo el análisis global.
Métodos para la anotación de células utilizando correlaciones de Spearman y genes marcadores:
Una estrategia efectiva para la anotación de células implica el uso de correlaciones de rangos de Spearman y genes marcadores específicos. Este enfoque se puede desglosar en los siguientes pasos:
Asignación inicial de etiquetas basada en correlaciones de Spearman:
Se calculan las correlaciones de Spearman entre los perfiles de expresión génica de las células en el conjunto de datos y las muestras de referencia de tipos celulares conocidos.
Las células se etiquetan según las muestras de referencia con las correlaciones de rangos más altas, asignándoles el tipo celular correspondiente.
Reducción de ruido mediante identificación de genes marcadores:
Para minimizar la influencia de genes que podrían introducir ruido, se identifican genes marcadores específicos entre pares de etiquetas en las muestras de referencia.
Se recalculan las correlaciones utilizando únicamente estos genes marcadores, enfocándose en las características más distintivas de cada tipo celular.
Afinamiento de la anotación mediante correlaciones adicionales:
Se realiza un ajuste fino repitiendo las correlaciones, pero esta vez utilizando solo los genes marcadores de las etiquetas con el mejor puntaje de correlación.
Este proceso ayuda a resolver ambigüedades entre etiquetas similares al eliminar el ruido de genes irrelevantes para otras etiquetas, mejorando la precisión de la anotación.
2.10.1 Identifying genes driving annotation
sce.pbmc$labels <- pred$labels
all.markers <- metadata(pred)$de.genes
lab <- "B-cells"
## Get the top 10 marker genes for B-cells
top.markers <- Reduce(union,sapply(all.markers[[lab]], head,10))
plotHeatmap(sce.pbmc,
order_columns_by = "labels",
features = top.markers,
center = TRUE,
zlim = c(-3,3),
main = lab)2.10.2 Comparing labels to clusters
## Order the heatmap by cluster
plotScoreHeatmap(pred,
clusters = sce.pbmc$cluster,
order.by.cluster = TRUE)## Compare labels to clusters
tab <- table(Assigned = pred$pruned.labels,
Cluster = sce.pbmc$cluster)
tab## Cluster
## Assigned 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## B-cells 0 1 0 418 0 112 0 0 0 0 0 0 0 0 13
## CD4+ T-cells 2 240 0 0 523 0 0 0 0 0 0 1 0 0 0
## CD8+ T-cells 6 356 401 0 495 8 1 0 0 0 0 0 0 0 0
## DC 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## Eosinophils 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
## Erythrocytes 0 1 0 0 0 0 5 0 0 0 0 0 0 0 0
## HSC 0 0 0 0 0 8 0 0 0 0 0 0 0 0 6
## Monocytes 0 0 0 0 0 0 1 132 298 142 336 38 90 16 16
## NK cells 164 1 75 0 0 2 0 0 0 0 0 0 0 0 0
Adicionalmente se recomienda realizar un Análisis de Expresión Diferencial (DEA) o de Abundancia Diferencial ya que nos permite obtener mayor resolución biológica que experimentos convencionales de bulk RNA-seq, sobretodo si se pueden asociar cambios de expresión a nivel de poblaciones celulares.
3. Seurat
Los pasos aquí son mucho más simples.
3.1 Load libraries
Install libraries
3.2 Create Seurat object
## Load the PBMC dataset
pbmc.data <- Read10X(data.dir = pbmc4k.path)
## Initialize the Seurat object with the raw (non-normalized data).
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc4k", min.cells = 3, min.features = 200)
dim(pbmc)## [1] 16746 4782
## [1] "RP11-34P13.7" "FO538757.2" "AP006222.2" "RP4-669L17.10"
## [5] "RP11-206L10.9" "LINC00115"
## [1] "AAACCTGAGAAGGCCT-1" "AAACCTGAGACAGACC-1" "AAACCTGAGATAGTCA-1"
## [4] "AAACCTGAGCGCCTCA-1" "AAACCTGAGGCATGGT-1" "AAACCTGCAAGGTTCT-1"
Explore Seurat object
## [1] "RNA"
## Assay (v5) data with 16746 features for 4782 cells
## First 10 features:
## RP11-34P13.7, FO538757.2, AP006222.2, RP4-669L17.10, RP11-206L10.9,
## LINC00115, FAM41C, SAMD11, NOC2L, KLHL17
## Layers:
## counts
## 3 x 3 sparse Matrix of class "dgCMatrix"
## AAACCTGAGAAGGCCT-1 AAACCTGAGACAGACC-1 AAACCTGAGATAGTCA-1
## RP11-34P13.7 . . .
## FO538757.2 . . .
## AP006222.2 . . .
## Passing `drop = TRUE` will turn the meta data into a names vector
## with each entry being named for the cell it corresponds to
head(pbmc[["nCount_RNA", drop = TRUE]])## AAACCTGAGAAGGCCT-1 AAACCTGAGACAGACC-1 AAACCTGAGATAGTCA-1 AAACCTGAGCGCCTCA-1
## 1738 3240 1683 2318
## AAACCTGAGGCATGGT-1 AAACCTGCAAGGTTCT-1
## 2983 4181
3.3 Quality Control (QC)
## Add mitochondrial stats
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")
## Quality control metrics
VlnPlot(pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)plot1 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "percent.mt")
plot2 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
plot1 + plot2## Filter cells
pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)
head(pbmc@meta.data, 5)3.4 Normalization
3.5 Highly Variable Genes (HVG’s)
3.6 Data Scaling
3.7 Lineal Dimensionality Reduction
Plot
## PC_ 1
## Positive: TRAC, LTB, CD3D, MALAT1, IL32
## Negative: CSTA, CST3, MNDA, LYZ, FCN1
## PC_ 2
## Positive: CD79A, MS4A1, IGHM, CD79B, IGHD
## Negative: HCST, IL32, CTSW, NKG7, GZMA
## PC_ 3
## Positive: RPS12, LEF1, EEF1A1, RPLP1, RPS18
## Negative: NKG7, GZMB, CST7, PRF1, KLRD1
## PC_ 4
## Positive: MALAT1, RPLP1, EEF1A1, RPS18, RPS12
## Negative: PPBP, TUBB1, SDPR, PF4, ACRBP
## PC_ 5
## Positive: IGHD, MS4A1, CD79A, CD79B, LINC00926
## Negative: LILRA4, LRRC26, CLEC4C, SERPINF1, TPM2
3.6.1 Choose Principal Components
Plot
3.7 Clustering
3.8 Non-lineal DImensionality Reduction
Plot
3.8 Cluster Marker Genes
## find markers for every cluster compared to all remaining cells, report only the positive ones
pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
pbmc.markers %>%
group_by(cluster) %>%
top_n(n = 2, wt = avg_log2FC)
cluster0.markers <- FindMarkers(pbmc, ident.1 = 0, logfc.threshold = 0.25, test.use = "roc", only.pos = TRUE)Plot
3.8 Cell type Annotation
Se puede integrar con SingleR pero no es tan fácil.
Reproducibilidad
## ─ Session info ───────────────────────────────────────────────────────────────
## setting value
## version R version 4.4.2 (2024-10-31 ucrt)
## os Windows 11 x64 (build 26100)
## system x86_64, mingw32
## ui RTerm
## language (EN)
## collate English_United States.utf8
## ctype English_United States.utf8
## tz America/Mexico_City
## date 2025-01-21
## pandoc 3.2 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)
##
## ─ Packages ───────────────────────────────────────────────────────────────────
## ! package * version date (UTC) lib source
## abind 1.4-8 2024-09-12 [1] CRAN (R 4.4.1)
## alabaster.base 1.6.1 2024-11-10 [1] Bioconductor 3.20 (R 4.4.1)
## alabaster.matrix 1.6.1 2024-11-20 [1] Bioconductor 3.20 (R 4.4.2)
## alabaster.ranges 1.6.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## alabaster.sce 1.6.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## alabaster.schemas 1.6.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## alabaster.se 1.6.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## annotate * 1.84.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## AnnotationDbi * 1.68.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## AnnotationFilter * 1.30.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## AnnotationHub * 3.14.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## AUCell * 1.28.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## batchelor 1.22.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## beachmat 2.22.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## beeswarm 0.4.0 2021-06-01 [1] CRAN (R 4.4.0)
## Biobase * 2.66.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## BiocFileCache * 2.14.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## BiocGenerics * 0.52.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## BiocIO 1.16.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## BiocManager 1.30.25 2024-08-28 [1] CRAN (R 4.4.2)
## BiocNeighbors 2.0.1 2024-11-28 [1] Bioconductor 3.20 (R 4.4.2)
## BiocParallel 1.40.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## BiocSingular 1.22.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## BiocVersion 3.20.0 2024-10-21 [1] Bioconductor 3.20 (R 4.4.1)
## Biostrings 2.74.1 2024-12-16 [1] Bioconductor 3.20 (R 4.4.2)
## bit 4.5.0.1 2024-12-03 [1] CRAN (R 4.4.2)
## bit64 4.5.2 2024-09-22 [1] CRAN (R 4.4.2)
## bitops 1.0-9 2024-10-03 [1] CRAN (R 4.4.1)
## blob 1.2.4 2023-03-17 [1] CRAN (R 4.4.2)
## bluster 1.16.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## cachem 1.1.0 2024-05-16 [1] CRAN (R 4.4.2)
## celldex * 1.16.0 2024-10-31 [1] Bioconductor 3.20 (R 4.4.2)
## cli 3.6.3 2024-06-21 [1] CRAN (R 4.4.2)
## cluster 2.1.6 2023-12-01 [2] CRAN (R 4.4.2)
## clustree * 0.5.1 2023-11-05 [1] CRAN (R 4.4.2)
## codetools 0.2-20 2024-03-31 [2] CRAN (R 4.4.2)
## colorspace 2.1-1 2024-07-26 [1] CRAN (R 4.4.2)
## cowplot 1.1.3 2024-01-22 [1] CRAN (R 4.4.2)
## crayon 1.5.3 2024-06-20 [1] CRAN (R 4.4.2)
## curl 6.0.1 2024-11-14 [1] CRAN (R 4.4.2)
## data.table 1.16.4 2024-12-06 [1] CRAN (R 4.4.2)
## DBI 1.2.3 2024-06-02 [1] CRAN (R 4.4.2)
## dbplyr * 2.5.0 2024-03-19 [1] CRAN (R 4.4.2)
## DelayedArray 0.32.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## DelayedMatrixStats 1.28.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## deldir 2.0-4 2024-02-28 [1] CRAN (R 4.4.0)
## digest 0.6.37 2024-08-19 [1] CRAN (R 4.4.2)
## dotCall64 1.2 2024-10-04 [1] CRAN (R 4.4.2)
## dplyr * 1.1.4 2023-11-17 [1] CRAN (R 4.4.2)
## dqrng 0.4.1 2024-05-28 [1] CRAN (R 4.4.2)
## DropletUtils * 1.26.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## edgeR 4.4.1 2024-12-02 [1] Bioconductor 3.20 (R 4.4.2)
## EnsDb.Hsapiens.v86 * 2.99.0 2024-12-22 [1] Bioconductor
## ensembldb * 2.30.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## evaluate 1.0.1 2024-10-10 [1] CRAN (R 4.4.2)
## ExperimentHub 2.14.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## farver 2.1.2 2024-05-13 [1] CRAN (R 4.4.2)
## fastDummies 1.7.4 2024-08-16 [1] CRAN (R 4.4.2)
## fastmap 1.2.0 2024-05-15 [1] CRAN (R 4.4.2)
## filelock 1.0.3 2023-12-11 [1] CRAN (R 4.4.2)
## fitdistrplus 1.2-1 2024-07-12 [1] CRAN (R 4.4.2)
## FNN 1.1.4.1 2024-09-22 [1] CRAN (R 4.4.2)
## future 1.34.0 2024-07-29 [1] CRAN (R 4.4.2)
## future.apply 1.11.3 2024-10-27 [1] CRAN (R 4.4.2)
## generics 0.1.3 2022-07-05 [1] CRAN (R 4.4.2)
## GenomeInfoDb * 1.42.1 2024-11-28 [1] Bioconductor 3.20 (R 4.4.2)
## GenomeInfoDbData 1.2.13 2024-12-22 [1] Bioconductor
## GenomicAlignments 1.42.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## GenomicFeatures * 1.58.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## GenomicRanges * 1.58.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## ggbeeswarm 0.7.2 2023-04-29 [1] CRAN (R 4.4.2)
## ggforce 0.4.2 2024-02-19 [1] CRAN (R 4.4.2)
## ggplot2 * 3.5.1 2024-04-23 [1] CRAN (R 4.4.2)
## ggraph * 2.2.1 2024-03-07 [1] CRAN (R 4.4.2)
## ggrastr 1.0.2 2023-06-01 [1] CRAN (R 4.4.2)
## ggrepel * 0.9.6 2024-09-07 [1] CRAN (R 4.4.2)
## ggridges 0.5.6 2024-01-23 [1] CRAN (R 4.4.2)
## globals 0.16.3 2024-03-08 [1] CRAN (R 4.4.0)
## glue 1.8.0 2024-09-30 [1] CRAN (R 4.4.2)
## goftest 1.2-3 2021-10-07 [1] CRAN (R 4.4.0)
## graph * 1.84.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## graphlayouts 1.2.1 2024-11-18 [1] CRAN (R 4.4.2)
## gridExtra 2.3 2017-09-09 [1] CRAN (R 4.4.2)
## GSEABase * 1.68.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## gtable 0.3.6 2024-10-25 [1] CRAN (R 4.4.2)
## gypsum 1.2.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## HDF5Array 1.34.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## htmltools 0.5.8.1 2024-04-04 [1] CRAN (R 4.4.2)
## htmlwidgets 1.6.4 2023-12-06 [1] CRAN (R 4.4.2)
## httpuv 1.6.15 2024-03-26 [1] CRAN (R 4.4.2)
## httr 1.4.7 2023-08-15 [1] CRAN (R 4.4.2)
## httr2 1.0.7 2024-11-26 [1] CRAN (R 4.4.2)
## ica 1.0-3 2022-07-08 [1] CRAN (R 4.4.0)
## igraph 2.1.2 2024-12-07 [1] CRAN (R 4.4.2)
## IRanges * 2.40.1 2024-12-05 [1] Bioconductor 3.20 (R 4.4.2)
## irlba 2.3.5.1 2022-10-03 [1] CRAN (R 4.4.2)
## jsonlite 1.8.9 2024-09-20 [1] CRAN (R 4.4.2)
## KEGGREST 1.46.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## KernSmooth 2.23-24 2024-05-17 [2] CRAN (R 4.4.2)
## knitr 1.49 2024-11-08 [1] CRAN (R 4.4.2)
## labeling 0.4.3 2023-08-29 [1] CRAN (R 4.4.0)
## later 1.4.1 2024-11-27 [1] CRAN (R 4.4.2)
## lattice 0.22-6 2024-03-20 [2] CRAN (R 4.4.2)
## lazyeval 0.2.2 2019-03-15 [1] CRAN (R 4.4.2)
## leiden 0.4.3.1 2023-11-17 [1] CRAN (R 4.4.2)
## lifecycle 1.0.4 2023-11-07 [1] CRAN (R 4.4.2)
## limma 3.62.1 2024-11-03 [1] Bioconductor 3.20 (R 4.4.1)
## listenv 0.9.1 2024-01-29 [1] CRAN (R 4.4.2)
## lmtest 0.9-40 2022-03-21 [1] CRAN (R 4.4.2)
## locfit 1.5-9.10 2024-06-24 [1] CRAN (R 4.4.2)
## magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.4.2)
## MASS 7.3-61 2024-06-13 [2] CRAN (R 4.4.2)
## Matrix * 1.7-1 2024-10-18 [2] CRAN (R 4.4.2)
## MatrixGenerics * 1.18.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## matrixStats * 1.4.1 2024-09-08 [1] CRAN (R 4.4.2)
## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.4.2)
## metapod 1.14.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## mime 0.12 2021-09-28 [1] CRAN (R 4.4.0)
## miniUI 0.1.1.1 2018-05-18 [1] CRAN (R 4.4.2)
## munsell 0.5.1 2024-04-01 [1] CRAN (R 4.4.2)
## nlme 3.1-166 2024-08-14 [2] CRAN (R 4.4.2)
## parallelly 1.41.0 2024-12-18 [1] CRAN (R 4.4.2)
## patchwork * 1.3.0 2024-09-16 [1] CRAN (R 4.4.2)
## pbapply 1.7-2 2023-06-27 [1] CRAN (R 4.4.2)
## PCAtools * 2.18.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## pheatmap * 1.0.12 2019-01-04 [1] CRAN (R 4.4.2)
## pillar 1.10.0 2024-12-17 [1] CRAN (R 4.4.2)
## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.4.2)
## plotly 4.10.4 2024-01-13 [1] CRAN (R 4.4.2)
## plyr 1.8.9 2023-10-02 [1] CRAN (R 4.4.2)
## png 0.1-8 2022-11-29 [1] CRAN (R 4.4.0)
## polyclip 1.10-7 2024-07-23 [1] CRAN (R 4.4.1)
## progressr 0.15.1 2024-11-22 [1] CRAN (R 4.4.2)
## promises 1.3.2 2024-11-28 [1] CRAN (R 4.4.2)
## ProtGenerics 1.38.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## purrr 1.0.2 2023-08-10 [1] CRAN (R 4.4.2)
## R.methodsS3 1.8.2 2022-06-13 [1] CRAN (R 4.4.0)
## R.oo 1.27.0 2024-11-01 [1] CRAN (R 4.4.1)
## R.utils 2.12.3 2023-11-18 [1] CRAN (R 4.4.2)
## R6 2.5.1 2021-08-19 [1] CRAN (R 4.4.2)
## RANN 2.6.2 2024-08-25 [1] CRAN (R 4.4.2)
## rappdirs 0.3.3 2021-01-31 [1] CRAN (R 4.4.2)
## RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.4.0)
## Rcpp 1.0.13-1 2024-11-02 [1] CRAN (R 4.4.2)
## RcppAnnoy 0.0.22 2024-01-23 [1] CRAN (R 4.4.2)
## RcppHNSW 0.6.0 2024-02-04 [1] CRAN (R 4.4.2)
## RCurl 1.98-1.16 2024-07-11 [1] CRAN (R 4.4.1)
## remotes 2.5.0 2024-03-17 [1] CRAN (R 4.4.2)
## reshape2 1.4.4 2020-04-09 [1] CRAN (R 4.4.2)
## ResidualMatrix 1.16.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## restfulr 0.0.15 2022-06-16 [1] CRAN (R 4.4.2)
## reticulate 1.40.0 2024-11-15 [1] CRAN (R 4.4.2)
## rhdf5 2.50.1 2024-12-09 [1] Bioconductor 3.20 (R 4.4.2)
## D rhdf5filters 1.18.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## Rhdf5lib 1.28.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## rjson 0.2.23 2024-09-16 [1] CRAN (R 4.4.1)
## rlang 1.1.4 2024-06-04 [1] CRAN (R 4.4.2)
## rmarkdown 2.29 2024-11-04 [1] CRAN (R 4.4.2)
## ROCR 1.0-11 2020-05-02 [1] CRAN (R 4.4.2)
## Rsamtools 2.22.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## RSpectra 0.16-2 2024-07-18 [1] CRAN (R 4.4.2)
## RSQLite 2.3.9 2024-12-03 [1] CRAN (R 4.4.2)
## rstudioapi 0.17.1 2024-10-22 [1] CRAN (R 4.4.2)
## rsvd 1.0.5 2021-04-16 [1] CRAN (R 4.4.2)
## rtracklayer 1.66.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## Rtsne 0.17 2023-12-07 [1] CRAN (R 4.4.2)
## S4Arrays 1.6.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## S4Vectors * 0.44.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## ScaledMatrix 1.14.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## scales 1.3.0 2023-11-28 [1] CRAN (R 4.4.2)
## scater * 1.34.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## scattermore 1.2 2023-06-12 [1] CRAN (R 4.4.2)
## scran * 1.34.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## scRNAseq * 2.20.0 2024-10-31 [1] Bioconductor 3.20 (R 4.4.2)
## sctransform 0.4.1 2023-10-19 [1] CRAN (R 4.4.2)
## scuttle * 1.16.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.4.2)
## Seurat * 5.1.0 2024-05-10 [1] CRAN (R 4.4.2)
## SeuratObject * 5.0.2 2024-05-08 [1] CRAN (R 4.4.2)
## shiny 1.10.0 2024-12-14 [1] CRAN (R 4.4.2)
## SingleCellExperiment * 1.28.1 2024-11-10 [1] Bioconductor 3.20 (R 4.4.1)
## SingleR * 2.8.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## sp * 2.1-4 2024-04-30 [1] CRAN (R 4.4.2)
## spam 2.11-0 2024-10-03 [1] CRAN (R 4.4.2)
## SparseArray 1.6.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## sparseMatrixStats 1.18.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## spatstat.data 3.1-4 2024-11-15 [1] CRAN (R 4.4.2)
## spatstat.explore 3.3-3 2024-10-22 [1] CRAN (R 4.4.2)
## spatstat.geom 3.3-4 2024-11-18 [1] CRAN (R 4.4.2)
## spatstat.random 3.3-2 2024-09-18 [1] CRAN (R 4.4.2)
## spatstat.sparse 3.1-0 2024-06-21 [1] CRAN (R 4.4.2)
## spatstat.univar 3.1-1 2024-11-05 [1] CRAN (R 4.4.2)
## spatstat.utils 3.1-1 2024-11-03 [1] CRAN (R 4.4.2)
## statmod 1.5.0 2023-01-06 [1] CRAN (R 4.4.2)
## stringi 1.8.4 2024-05-06 [1] CRAN (R 4.4.0)
## stringr 1.5.1 2023-11-14 [1] CRAN (R 4.4.2)
## SummarizedExperiment * 1.36.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## survival 3.7-0 2024-06-05 [2] CRAN (R 4.4.2)
## tensor 1.5 2012-05-05 [1] CRAN (R 4.4.0)
## tibble 3.2.1 2023-03-20 [1] CRAN (R 4.4.2)
## tidygraph 1.3.1 2024-01-30 [1] CRAN (R 4.4.2)
## tidyr 1.3.1 2024-01-24 [1] CRAN (R 4.4.2)
## tidyselect 1.2.1 2024-03-11 [1] CRAN (R 4.4.2)
## tweenr 2.0.3 2024-02-26 [1] CRAN (R 4.4.2)
## UCSC.utils 1.2.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## uwot 0.2.2 2024-04-21 [1] CRAN (R 4.4.2)
## vctrs 0.6.5 2023-12-01 [1] CRAN (R 4.4.2)
## vipor 0.4.7 2023-12-18 [1] CRAN (R 4.4.2)
## viridis 0.6.5 2024-01-29 [1] CRAN (R 4.4.2)
## viridisLite 0.4.2 2023-05-02 [1] CRAN (R 4.4.2)
## withr 3.0.2 2024-10-28 [1] CRAN (R 4.4.2)
## xfun 0.49 2024-10-31 [1] CRAN (R 4.4.2)
## XML * 3.99-0.17 2024-06-25 [1] CRAN (R 4.4.1)
## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.4.2)
## XVector 0.46.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## yaml 2.3.10 2024-07-26 [1] CRAN (R 4.4.1)
## zlibbioc 1.52.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
## zoo 1.8-12 2023-04-13 [1] CRAN (R 4.4.2)
##
## [1] C:/Users/chomb/AppData/Local/R/win-library/4.4
## [2] C:/Program Files/R/R-4.4.2/library
##
## D ── DLL MD5 mismatch, broken installation.
##
## ──────────────────────────────────────────────────────────────────────────────